// http.ts
import axios, { type AxiosInstance, type AxiosResponse, type InternalAxiosRequestConfig } from 'axios'
import { createDiscreteApi } from 'naive-ui'
import router from '../router'
// 创建一个 axios 实例
const apiClient: AxiosInstance = axios.create({
  baseURL: 'https://dev-5genhwgo604cfadc-1251845214.ap-shanghai.app.tcloudbase.com', // 设置基础 URL，可从环境变量读取
  timeout: 10000, // 请求超时时间（毫秒）
  withCredentials:false,
  headers: {
    'Content-Type': 'application/json',
    // 可以在这里添加默认的请求头
  },
});

// 创建离散API用于错误提示
const { message,dialog } = createDiscreteApi(['message','dialog'])

// 可选：添加请求拦截器
apiClient.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    // 在发送请求之前做些什么，例如添加 token
    const token = localStorage.getItem('token');
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    // 处理请求错误
    return Promise.reject(error);
  }
);

// 可选：添加响应拦截器
apiClient.interceptors.response.use(
  (response: AxiosResponse) => {
    // 对响应数据做点什么
    return response; // 直接返回数据部分
  },
  (error) => {
    // 处理响应错误
    const errorMessage = error.response?.data?.message || error.message;
    
    // 根据不同的状态码显示不同的错误提示
    if (error.response) {
      switch (error.response.status) {
        case 400:
          message.error('请求参数有误，请检查后重试');
          break;
        case 401:
          message.error('登录已过期，请重新登录');
          router.push('/login');

          break;
        case 403:
          message.error('您没有权限执行此操作');
          break;
        case 404:
          message.error('找不到请求的资源');
          break;
        case 408:
          message.error('请求超时，请稍后重试');
          break;
        case 500:
          message.error('服务器异常，请稍后重试');
          break;
        case 501:
          message.error('功能未实现，请联系管理员');
          break;
        case 502:
          message.error('网关错误，请稍后重试');
          break;
        case 503:
          message.error('服务暂时不可用，请稍后重试');
          break;
        case 504:
          message.error('网关超时，请稍后重试');
          break;
        default:
          message.error('操作失败，请稍后重试');
      }
    } else if (error.request) {
      console.error(error)
      // 请求已发出但没有收到响应
      message.error('网络连接异常，请检查网络设置');
      dialog.error({title: '提示', content: '网络连接异常，请检查网络设置'+error+' '+error.stack+' '+error.message+' '+JSON.stringify(error.request)})
    } else {
      // 其他错误
      message.error('操作失败，请稍后重试');
    }
    
    console.error('API Error:', errorMessage);
    return Promise.reject(new Error(errorMessage));
  }
);

// 导出配置好的 axios 实例
export default apiClient;